using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestCoordinateRecalculation
{
    class Program
    {
        static void Main(string[] args)
        {
            // 测试坐标重新计算逻辑
            Console.WriteLine("测试坐标重新计算逻辑");
            
            // 模拟您的情况：坐标(2152,607)大于屏幕信息(1920x1080)
            string originalCoordinate = "2152,607";
            string sourceScreenInfo = "1920x1080@1.00";
            
            Console.WriteLine($"原始坐标: {originalCoordinate}");
            Console.WriteLine($"源屏幕信息: {sourceScreenInfo}");
            
            // 解析原始坐标
            var coordParts = originalCoordinate.Split(',');
            if (coordParts.Length == 2 && 
                int.TryParse(coordParts[0], out int x) && 
                int.TryParse(coordParts[1], out int y))
            {
                Console.WriteLine($"解析得到的坐标: X={x}, Y={y}");
                
                // 检查是否超出源屏幕范围
                var screenParts = sourceScreenInfo.Split('@');
                var resolutionParts = screenParts[0].Split('x');
                if (resolutionParts.Length == 2 &&
                    int.TryParse(resolutionParts[0], out int screenWidth) &&
                    int.TryParse(resolutionParts[1], out int screenHeight))
                {
                    Console.WriteLine($"源屏幕尺寸: {screenWidth}x{screenHeight}");
                    
                    if (x > screenWidth || y > screenHeight)
                    {
                        Console.WriteLine("警告：坐标超出了源屏幕范围！");
                        Console.WriteLine($"  X 超出范围: {x} > {screenWidth} = {x > screenWidth}");
                        Console.WriteLine($"  Y 超出范围: {y} > {screenHeight} = {y > screenHeight}");
                        
                        // 这就是问题所在：
                        // 当导入配置时，如果目标屏幕与源屏幕不同，
                        // 程序应该重新计算坐标以适应新的屏幕分辨率
                        Console.WriteLine("\n解决方案建议：");
                        Console.WriteLine("1. 在导出配置时，确保坐标不超过屏幕边界");
                        Console.WriteLine("2. 在导入配置时，根据目标屏幕重新计算坐标");
                        Console.WriteLine("3. 可以使用ScreenInfo.RecalculateCoordinate方法进行坐标转换");
                    }
                    else
                    {
                        Console.WriteLine("坐标在源屏幕范围内。");
                    }
                }
            }
            
            // 额外测试：模拟坐标重新计算过程
            Console.WriteLine("\n=== 坐标重新计算示例 ===");
            SimulateCoordinateRecalculation();
            
            Console.WriteLine("\n按任意键退出...");
            Console.ReadKey();
        }
        
        /// <summary>
        /// 模拟坐标重新计算过程
        /// </summary>
        static void SimulateCoordinateRecalculation()
        {
            // 原始坐标和屏幕信息
            string originalCoordinate = "2152,607";
            string sourceScreen = "1920x1080@1.00";
            string targetScreen = "2560x1440@1.00";
            
            Console.WriteLine($"原始坐标: {originalCoordinate}");
            Console.WriteLine($"源屏幕: {sourceScreen}");
            Console.WriteLine($"目标屏幕: {targetScreen}");
            
            // 解析坐标
            var coords = originalCoordinate.Split(',');
            if (coords.Length == 2 && 
                int.TryParse(coords[0], out int x) && 
                int.TryParse(coords[1], out int y))
            {
                // 解析源屏幕信息
                var sourceParts = sourceScreen.Split('@');
                var sourceRes = sourceParts[0].Split('x');
                int sourceWidth = int.Parse(sourceRes[0]);
                int sourceHeight = int.Parse(sourceRes[1]);
                
                // 解析目标屏幕信息
                var targetParts = targetScreen.Split('@');
                var targetRes = targetParts[0].Split('x');
                int targetWidth = int.Parse(targetRes[0]);
                int targetHeight = int.Parse(targetRes[1]);
                
                // 计算比例
                double scaleX = (double)targetWidth / sourceWidth;
                double scaleY = (double)targetHeight / sourceHeight;
                
                // 重新计算坐标
                int newX = (int)(x * scaleX);
                int newY = (int)(y * scaleY);
                
                // 确保不超过目标屏幕边界
                newX = Math.Min(newX, targetWidth);
                newY = Math.Min(newY, targetHeight);
                
                Console.WriteLine($"重新计算后的坐标: {newX},{newY}");
                Console.WriteLine($"缩放比例: X={scaleX:F2}, Y={scaleY:F2}");
            }
        }
    }
}